package com.fau.wm.service;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.wm.entity.MedicalAdmin;
import com.fau.wm.entity.MedicalMedicine;
import com.fau.wm.entity.MedicalMedicinePosition;
import com.fau.wm.entity.MedicalMedicineSort;
import com.fau.wm.util.Page;

/**
 * @desc 药品管理业务接口
 * @author kangyj
 * @datetime 2014年7月25日,下午6:02:28
 */
public interface IMedicineManagerService {
	
	/**
	 * @desc 判断是否有重复的药品名称
	 * @param name
	 * @return boolean
	 * @author liy
	 * @datetime 2014年12月18日,下午2:45:24
	 */
	public boolean isRepeatName(String pid,String name);
	
	/**
	 * @desc 查询药品类别集合
	 * @param admin 当前用户
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月27日,下午5:24:15
	 */
	public List<MedicalMedicineSort> findMedSortList(MedicalAdmin admin);

	/**
	 * @desc 保存药品类别
	 * @param medicineSort
	 * @param admin
	 * @author kangyj
	 * @datetime 2014年7月27日,上午11:04:06
	 */
	public Boolean saveMedicineSort(MedicalMedicineSort medicineSort, MedicalAdmin admin);
	
	/**
	 * @desc 保存编辑药品类别
	 * @param medicineSort 药品类别实体类
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月10日,下午6:32:10
	 */
	public boolean saveEditMedicineSort(MedicalMedicineSort medicineSort);
	
	/**
	 * @desc 编辑保存药品
	 * @param medicine
	 * @author kangyj
	 * @datetime 2014年7月30日,下午9:43:46
	 */
	public void saveEditMedicine(MedicalMedicine medicine);
	
	/**
	 * @desc 判断当前操作的药品类别下是否有子类别
	 * @param id
	 * @return
	 * @author kangyj
	 * @datetime 2014年7月26日,上午11:11:19
	 */
	public boolean containChild(String id);
	
	/**
	 * @desc 检查药品类别是否在使用中
	 * @param id 类别id
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月26日,下午11:16:55
	 */
	public Boolean checkSortInUse(String id);
	
	/**
	 * @desc 删除药品分类
	 * @param medicineSort
	 * @author kangyj
	 * @datetime 2014年7月26日,上午11:06:58
	 */
	public void delMedicineSort(MedicalMedicineSort medicineSort);
	
	/**
	 * @desc 保存药品
	 * @param medicine
	 * @param admin
	 * @author kangyj
	 * @datetime 2014年7月27日,上午11:07:09
	 */
	public boolean saveMedicine(MedicalMedicine medicine, MedicalAdmin admin);
	
	/**
	 * @desc 分页查询药品
	 * @param medicine
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年7月28日,下午4:01:09
	 */
	public Page findMedicineByPage(MedicalMedicine medicine, Map<String, Object> map);
	
	/**
	 * @desc 查询已设置提醒数的药品
	 * @param medicine 查询条件
	 * @param map 分页参数
	 * @return Page
	 * @author liy
	 * @datetime 2014年12月21日,下午6:24:28
	 */
	public Page findMedicineIsWarn(MedicalMedicine medicine, Map<String, Object> map);
	
	/**
	 * @desc 删除药品
	 * @param medicine
	 * @author kangyj
	 * @datetime 2014年7月30日,下午4:51:23
	 */
	public boolean delMedicine(MedicalMedicine medicine);
	
	/**
	 * @desc 批量删除药品提醒数
	 * @param medicine 待删除的提醒
	 * @author liy
	 * @datetime 2014年12月22日,上午9:28:39
	 */
	public void delMedicineWarnNum(MedicalMedicine medicine);
	
	/**
	 * @desc 按药品名称模糊查询
	 * @param admin 当前登录用户
	 * @param name 药品名称
	 * @return List<MedicalMedicine>
	 * @author kangyj
	 * @datetime 2014年11月27日,下午5:37:40
	 */
	public List<MedicalMedicine> findMedicineByName(MedicalAdmin admin, String name);
	
	/**
	 * @desc 验证输入的编号是否已存在
	 * @param serialNum
	 * @return
	 * @author kangyj
	 * @datetime 2014年7月31日,上午11:24:45
	 */
	public Boolean verSerialNum(String serialNum);
	
	/**
	 * @desc 根据id查询药品信息
	 * @param id
	 * @return
	 * @author suny
	 * @datetime 2014年9月11日,下午9:09:06
	 */
	public MedicalMedicine findMedicineById(String id);
	
	/**
	 * @desc 导入药品Excel
	 * @param filePath Excel文件路径
	 * @param 当前用户
	 * @return
	 * @throws IOException
	 * @author kangyj
	 * @datetime 2014年10月8日,上午11:10:47
	 */
	public String importMedicine(MedicalAdmin admin, File file) throws Exception;
	
	/**
	 * @desc 根据药品名称查询药品
	 * @return boolean true有同名药品
	 * @author liy
	 * @datetime 2014年12月18日,下午4:04:13
	 */
	public boolean findMedicineByName(String name);
	
	/**
	 * @desc 获得库存缺货提醒数
	 * @return null
	 * @author liy
	 * @datetime 2014年12月21日,下午4:07:11
	 */
	public int findMedicineWarnNum();
	
	/**
	 * @desc 设置库存缺货提醒数
	 * @return 
	 * @author liy
	 * @datetime 2014年12月21日,下午4:37:23
	 */
	public void setMedicineWarnNum(int num);
	
	/**
	 * @desc 设置特定药品的提醒数
	 * @param medicine 
	 * @author liy
	 * @datetime 2014年12月21日,下午7:09:47
	 */
	public void setMedicineWarnNumSpe(MedicalMedicine medicine);
	
	/**
	 * @desc 修改特定药品的提醒数
	 * @param medicine 
	 * @author liy
	 * @datetime 2014年12月22日,上午10:09:41
	 */
	public void updateMedicineWarnNumSpe(MedicalMedicine medicine);
	
	/**
	 * @desc 查询药品所在位置
	 * @param mid 药品Id
	 * @author liy
	 * @datetime 2014年12月22日,下午4:12:22
	 */
	public List<MedicalMedicinePosition> findMedicalLocation(String mid);
	
	/**
	 * @desc 取消导入，删除Excel文件
	 * @param filePath
	 * @author kangyj
	 * @datetime 2014年10月8日,上午11:28:35
	 */
	public void delExcel(String filePath);
	
	/**
	 * @desc 下载药品导入模板
	 * @param admin
	 * @return
	 * @throws Exception
	 * @author zhaoey
	 * @datetime 2015年4月3日,下午4:57:25
	 */
	public Workbook downloadMedicineTemp(MedicalAdmin admin) throws Exception;
}
